#ifndef _NEPTUNER_SONAR_H_
#define _NEPTUNER_SONAR_H_

#include "Scubwalker.h"

#include "Method.h"
#include<vector>
#include<string>

class SonarOptions
{
public:
	bool m_bTokens;
	bool m_bEchoWorkspace;
	bool m_bSymbolTables;
	bool m_bScopeChanges;
	bool m_bFileSummary;
	bool m_bNoHeading;
	bool m_bModeQuiet;

	SonarOptions()
	{
		m_bTokens = false;
		m_bEchoWorkspace = false;
		m_bSymbolTables = false;
		m_bScopeChanges = false;
		m_bFileSummary = true; 
		m_bNoHeading = false;
		m_bModeQuiet = false;
	}

};

class Sonar: public Scubwalker
{
public:
	int m_nIndent;

	int m_nLoC;
	int m_nLoCom;
	int m_nTotalLines;
	int m_nStatements;
	int m_nCharacters;
	int m_nTabs;
	int m_nSpaces;

	bool m_bLiveTokenDisplay;
	bool m_bScopeChangeDisplay;

	std::vector<std::string> m_asToken;
	

private:
	void indent();

public:
	virtual void offNewToken(Scope& inScope, Token& inToken);
    virtual void offScopeEntry(Scope& inNewScope, Scope& inOldScope);
    virtual void offScopeExit(Scope& inNewScope, Scope& inOldScope);

   Sonar(void);
    ~Sonar(void);

	void setLiveDisplay(bool bTokens, bool bScopeChanges);
	void printScopeSymbols(Scope* pxScope, SonarOptions* pxOpt);
	void print(SonarOptions *pxOpt);
};

#endif

